<?php
class App_Observer_Estado {

    function __construct() {}

    public function notify(array $datos) {
       //Asignaciones a una sesion de la sala
       switch ($datos["codestado"]) {
           case Solicitudes_Model_Historicoprocesos::EN_AUTOEVALUACION:
               $Sintesis  = new Solicitudes_Model_DetalleSolicitud();
               $Sintesis->CopiarDatosProceso($datos["codproceso"]);
               break;
           case Solicitudes_Model_Historicoprocesos::DESIGNACION_CONSEJEROS :
           case Solicitudes_Model_Historicoprocesos::CON_INFORME_CONSEJERO :
           case Solicitudes_Model_Historicoprocesos::CON_PONENCIA_DEL_CONSEJERO :
               $procesoSesionService = new Salas_Model_ProcesoSesion();
               $procesoSesionService->asignarProcesoAutomatico($datos["codproceso"]);
               break;
       }
       
        //Envios de notificaciones
        switch ($datos["codestado"]) {
           case Solicitudes_Model_Historicoprocesos::CONSEJEROS_DESIGNADOS :
               $this->notificarConsejerosDesignados($datos);
               break;
           case Solicitudes_Model_Historicoprocesos::CON_PARES_DESIGNADOS :
               $this->notificarParesDesignados($datos);
               break;
           case Solicitudes_Model_Historicoprocesos::CON_CONSEJERO_DESIGNADO :
               $this->notificarConsejeroRevisor($datos);
               break;
        }
    }
    
    public function notificarConsejeroRevisor(array $datos) {
        
        $informeService = new Solicitudes_Model_Informe();
    	$procesosTable = new Solicitudes_Model_DbTable_Procesos();
    	$institucionesService = new Instituciones_Model_Instituciones();
    	$usuariosService = new Usuarios_Model_Usuarios();
    	
    	$informe = $informeService->getInformeProceso($datos["codproceso"]);
    	if(empty($informe["codconsejero"])) {
    	    return;
    	}
    	$consejero = $usuariosService->cargardatos($informe["codconsejero"]);
    	
    	$asunto = "Consejero revisor - SACES Alta Calidad - Ministerio de Educación Nacional";
    	
    	$cuerpo = "Usted ha sido designado como consejero revisor para el informe de par del siguiente proceso:".PHP_EOL;
    	$cuerpo .="Código proceso: [CODIGO_PROCESO]".PHO_EOL;
    	$cuerpo .="Programa: [NOMBRE_PROGRAMA]".PHO_EOL;
    	$cuerpo .="Institución [NOMBRE_INSTITUCION]".PHP_EOL;
    	$cuerpo .="Ciudad del programa [UBICACION_PROGRAMA]".PHP_EOL;
    	
    	$proceso = $procesosTable->getProceso($datos["codproceso"]);
    	$institucion = $institucionesService->cargardatosInfo($proceso["codinstitucion"]);
    	$cuerpo = str_replace("[CODIGO_PROCESO]", $datos["codproceso"], $cuerpo);
    	$cuerpo = str_replace("[NOMBRE_PROGRAMA]", $proceso["nombreprograma"], $cuerpo);
    	$cuerpo = str_replace("[NOMBRE_INSTITUCION]", $institucion["nombrecompleto"], $cuerpo);
    	$cuerpo = str_replace("[UBICACION_PROGRAMA]", $proceso["ubicacion"], $cuerpo);
    	
    	$mail = new App_Mail();
	    $correos = $this->getMailsToSend($consejero);
	    if(count($correos) >0) {
	        $msg = $this->getTextoSaludo("{$consejero["nombres"]} {$consejero["apellidos"]}");
	        $msg .= $cuerpo;
	        $msg .= $this->getTextoDespedida();
	        
	        $mail->sendText($correos, $asunto, $msg);
	    }
    }
    
    public function notificarParesDesignados(array $datos) {
        $paresProcesoService = new Visitas_Model_ParesProceso();
    	$procesosTable = new Solicitudes_Model_DbTable_Procesos();
    	$institucionesService = new Instituciones_Model_Instituciones();
    	
    	$pares = $paresProcesoService->getListaParesProceso($datos["codproceso"]);
    	
    	$arr_tipopar = array(1=>"PAR",2=>"PAR RELATOR",3=>"PAR INTERNACIONAL");
    	$arr_coordinador = array("S"=>"COORDINADOR","N"=>"");
    	$arr_principal = array("S"=>"PRINCIPAL","N"=>"SECUNDARIO");
    	
    	$asunto = "Designación de pares - SACES Alta Calidad - Consejo Nacional de Acreditación CNA.";
    	
    	$primer_linea = "Usted ha sido designado como [TIPO_PAR] del siguiente proceso:".PHP_EOL;
//    	$cuerpo = "Usted ha sido designado como [TIPO_PAR] del siguiente proceso:".PHP_EOL;
    	$cuerpo  ="Código proceso: [CODIGO_PROCESO]".PHO_EOL;
    	$cuerpo .="Programa: [NOMBRE_PROGRAMA]".PHO_EOL;
    	$cuerpo .="Institución [NOMBRE_INSTITUCION]".PHP_EOL;
    	$cuerpo .="Ciudad del programa [UBICACION_PROGRAMA]".PHP_EOL;
    	
    	$proceso = $procesosTable->getProceso($datos["codproceso"]);
    	$institucion = $institucionesService->cargardatosInfo($proceso["codinstitucion"]);
    	$cuerpo = str_replace("[CODIGO_PROCESO]", $datos["codproceso"], $cuerpo);
    	$cuerpo = str_replace("[NOMBRE_PROGRAMA]", $proceso["nombreprograma"], $cuerpo);
    	$cuerpo = str_replace("[NOMBRE_INSTITUCION]", $institucion["nombrecompleto"], $cuerpo);
    	$cuerpo = str_replace("[UBICACION_PROGRAMA]", $proceso["ubicacion"], $cuerpo);
    	
    	$mail = new App_Mail();
    	foreach($pares as $par) {
    	    
        	$tipopar = $arr_tipopar[$par["tipopar"]];
    		$coordinador = $arr_coordinador[$par["coordinador"]];
    		
    		$tipo = "{$tipopar} {$coordinador}";
    		
    		$primer_linea = str_replace("[TIPO_PAR]", $tipo, $primer_linea);
    		 
    		$cuerpo = $primer_linea.$cuerpo;
    		
    	    $correos = $this->getMailsToSend($par).",cna@cna.gov.co";
    	    if(count($correos) >0) {
    	        $msg = $this->getTextoSaludo("{$par["nombres"]} {$par["apellidos"]}");
    	        $msg .= $cuerpo;
    	        $msg .= $this->getTextoDespedida();
    	        
    	        $mail->sendText($correos, $asunto, $msg);
    	    }
    	}
    }
    
    public function notificarConsejerosDesignados(array $datos) {
    	$paresProcesoService = new Visitas_Model_ParesProceso();
    	$procesosTable = new Solicitudes_Model_DbTable_Procesos();
    	$institucionesService = new Instituciones_Model_Instituciones();
    	$solicituesService = new Solicitudes_Model_Solicitudes();
    	
    	$consejeros = $paresProcesoService->getListaConsejerosProceso($datos["codproceso"]);
    	
    	$asunto = "Designación de consejeros - SACES Alta Calidad - Ministerio de Educación Nacional";
    	
    	$datosproceso = $solicituesService->cargarDatosProceso($datos["codproceso"]);
    	$datossolicitud = $solicituesService->cargarDatos($datosproceso["codsolicitud"]);
    	
    	if (in_array($datossolicitud["tiposolicitud"], array(5,6))){
    	    $cuerpo = "Usted ha sido designado como consejero del siguiente proceso:".PHP_EOL;
        	$cuerpo .="Código proceso: [CODIGO_PROCESO]".PHO_EOL;
        	$cuerpo .="Institución [NOMBRE_INSTITUCION]".PHP_EOL;
        	$cuerpo .="Ciudad de la institución [UBICACION_INSTITUCION]".PHP_EOL;
        	
        	$institucion = $institucionesService->cargardatosInfo($datossolicitud["codinstitucion"]);
        	$cuerpo = str_replace("[CODIGO_PROCESO]", $datos["codproceso"], $cuerpo);
        	$cuerpo = str_replace("[NOMBRE_INSTITUCION]", $institucion["nombrecompleto"], $cuerpo);
        	$cuerpo = str_replace("[UBICACION_INSTITUCION]", $institucion["ubicacion"], $cuerpo);
    	}else{
    	    $cuerpo = "Usted ha sido designado como consejero del siguiente proceso:".PHP_EOL;
        	$cuerpo .="Código proceso: [CODIGO_PROCESO]".PHO_EOL;
        	$cuerpo .="Programa: [NOMBRE_PROGRAMA]".PHO_EOL;
        	$cuerpo .="Institución [NOMBRE_INSTITUCION]".PHP_EOL;
        	$cuerpo .="Ciudad del programa [UBICACION_PROGRAMA]".PHP_EOL;
        	
        	$proceso = $procesosTable->getProceso($datos["codproceso"]);
        	$institucion = $institucionesService->cargardatosInfo($proceso["codinstitucion"]);
        	$cuerpo = str_replace("[CODIGO_PROCESO]", $datos["codproceso"], $cuerpo);
        	$cuerpo = str_replace("[NOMBRE_PROGRAMA]", $proceso["nombreprograma"], $cuerpo);
        	$cuerpo = str_replace("[NOMBRE_INSTITUCION]", $institucion["nombrecompleto"], $cuerpo);
        	$cuerpo = str_replace("[UBICACION_PROGRAMA]", $proceso["ubicacion"], $cuerpo);
    	}
    	$mail = new App_Mail();
    	foreach($consejeros as $consejero) {
    	    $correos = $this->getMailsToSend($consejero);
    	    if(count($correos) >0) {
    	        $msg = $this->getTextoSaludo("{$consejero["nombres"]} {$consejero["apellidos"]}");
    	        $msg .= $cuerpo;
    	        $msg .= $this->getTextoDespedida();
    	        
    	        $mail->sendText($correos, $asunto, $msg);
    	    }
    	}
    }
    
    function getMailsToSend(array $datos) {
        $correos = array();
        if(trim($datos["emailexterno"]) != "") {
            $temp = explode(",", $datos["emailexterno"]);
            $temp = array_map("trim", $temp);
            $temp = array_filter($temp, "strlen");
            $correos = array_merge($correos, $temp);
        }
        if(trim($datos["emailalterno"]) != "") {
            $temp = explode(",", $datos["emailalterno"]);
            $temp = array_map("trim", $temp);
            $temp = array_filter($temp, "strlen");
            $correos = array_merge($correos, $temp);
        }
        return $correos;
    }
    
    function getTextoSaludo($nombrePersona) {
        $saludo = "Cordial saludo [NOMBRE_PERSONA], ".PHP_EOL.PHP_EOL;
        return str_replace("[NOMBRE_PERSONA]", "{$nombrePersona}", $saludo);
    }
    
    function getTextoDespedida() {
    	$despedida = PHP_EOL.PHP_EOL.PHP_EOL."Por favor ingrese al sistema SACES-CNA a través del siguiente link: http://saces.mineducacion.gov.co/incna para obtener mayor detalle de esta información.";
    	$despedida .= PHP_EOL.PHP_EOL."Este mensaje ha sido enviado automáticamente por el sistema SACES-CNA del Ministerio de Educación Nacional.";
    	return $despedida;
    }
    
}//fin de la clase